package com.tiancheng.trade.merchant.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tiancheng.trade.commom.web.model.request.QueryOrderMerchantReqVO;
import com.tiancheng.trade.commom.web.model.response.QueryOrderMerchantResVO;
import com.tiancheng.trade.merchant.dto.responsedto.MerchantWithChannelDTO;
import com.tiancheng.trade.merchant.model.Merchant;
import com.tiancheng.trade.merchant.vo.merchant.GetMerchantPaymentVO;
import com.tiancheng.trade.merchant.vo.merchant.GetPageMerchantVO;
import com.tiancheng.trade.merchant.vo.merchant.MerchantExpVO;
import com.tiancheng.trade.merchant.vo.merchant.MerchantPaymentChannelVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MerchantMapper extends MYBaseMapper<Merchant> {

    /**
     * 批量修改商户信息
     *
     * @param merchantCodes
     * @return
     */
    List<Merchant> getMerchantByMerCode(@Param("list") List<String> merchantCodes);

    /**
     * 批量修改商户信息
     *
     * @param merchantCodes
     * @return
     */
    int updateDelBatch(@Param("list") List<String> merchantCodes);


    /**
     * 查询商户信息总数
     *
     * @return
     */
    int countMerchantList(GetPageMerchantVO merchantVO);

//    /**
//     * 查询商户信息
//     *
//     * @return
//     */
//    List<Merchant> getMerchantPage(GetPageMerchantVO merchantVO);

    IPage<Merchant> getMerchantPage(Page<?> page, @Param("vo") GetPageMerchantVO merchantVO);


    /**
     * 查询导出商户信息
     *
     * @return
     */
    List<MerchantExpVO> getMerchantExport(@Param("vo") GetPageMerchantVO merchantVO);

    /**
     * 查询商户和组织信息
     *
     * @param merchantVO
     * @return
     */
    List<Merchant> findMerchantOrg(@Param("vo") GetPageMerchantVO merchantVO);

    /**
     * 根据商户编码和支付渠道编码查询商户信息（批量）
     *
     * @param payChannelCode
     * @param list
     */
    List<MerchantWithChannelDTO> listByMerchantCodeAndChannel(@Param("payChannelCode") String payChannelCode, @Param("list") List<GetMerchantPaymentVO> list);

    /**
     * 根据交易中台 商户编号 商户信息和支付渠道信息
     *
     * @param list {@link List}<{@link String}> 交易中台商品编号列表
     * @return {@link List}<{@link MerchantPaymentChannelVO}> 商品和支付渠道信息列表
     */
    List<MerchantPaymentChannelVO> findPaymentChannelByMerchantCodes(@Param("list") List<String> list);

    /**
     * 查询支付下单商户信息
     * @param queryOrderMerchantReqVO
     * @return
     */
    List<QueryOrderMerchantResVO> queryOrderMerchant(QueryOrderMerchantReqVO queryOrderMerchantReqVO);
}
